#include<iostream>
#include<vector>
#include<queue>

using namespace std;

class MedianFinder {
public:
    MedianFinder() {}

    void addNum(int num) {
        if (_min.empty() || num <= _min.top())
        {
            _min.push(num);
            if (_min.size() > _max.size() + 1)
            {
                _max.push(_min.top());
                _min.pop();
            }
        }
        else
        {
            _max.push(num);
            if (_max.size() > _min.size())
            {
                _min.push(_max.top());
                _max.pop();
            }
        }
    }

    double findMedian() {
        if (_min.size() > _max.size())
            return _min.top();
        return (_min.top() + _max.top()) / 2.0;
    }
private:
    priority_queue<int> _min;
    priority_queue<int, vector<int>, greater<int>> _max;
};